Le langage Algo est conçu comme une extension de Javascript (JS), initialement prévu pour le débutant en algorithmique/programmation, pour minimiser son effort de frappe au clavier afin qu'il se concentre sur les problèmes à résoudre.
Il accepte aussi l'écriture des algorithmes avec la syntaxe JS. Les plus avancés —désireux d'écrire leurs algorithmes en Javascript— peuvent alors tirer profit de l'ouvrage de Marijn Haverbeke, accessible aussi en forme spécifique (accès par la clé usuelle) où les scripts sont plus directement exécutables.
Un script (ou programme) en Algo met en œuvre un algorithme qui exploite
des données (dites d'entrée
, dont l'utilisateur fait la saisie)
pour arriver au résultat escompté,
souvent affecté à une ou plusieurs variables, dites de sortie
.
Un algorithme est conçu en plusieurs étapes insécables
que l'on appelle des instructions.
Un résultat n'est pas forcément un affichage à l'écran, car il peut très bien, par exemple dans un logiciel embarqué sur une automobile, se contenter de prendre en compte des données mécaniques pour commander la bonne injection de carburant dans les chambres de combustion : le conducteur de l'automobile ne se rend même pas compte qu'un tel programme est exécuté !
Dans la suite on utilisera algorithme
comme synonyme de script
,
puisque nous n'utiliserons qu'un seul langage, Algo, orienté algorithmique.
Pour le débutant, cette confusion n'a pas vraiment d'importance.
En effet, l'algorithmique en tant que discipline n'a vraiment de sens que dans les cours supérieurs, car on suppose d'une part exploiter une machine théorique aux capacités limitées, orientée calcul dans de nombreux cas, que l'apprenant sait déjà programmer et d'autre part qu'il ait un bagage mathématique non négligeable.
Comme tout langage, Algo se lit et s'écrit : c'est incontournable en programmation.
Le langage est ici intensivement colorisé :
Un script pouvant faire beaucoup de choses mais ne fournir (n'afficher en ce qui nous concerne)
que peu d'informations,
il est bon de chercher à comprendre ce qu'il va faire avant de l'exécuter (donc de le
Dans ce tutoriel, tous les scripts sont
Il est important de remarquer qu'on peut ajouter des commentaires en fin de ligne, tous précédés de // (double slash). Ceux-ci n'interviennent pas à l'exécution : leur but est de permettre au concepteur de préciser ce qu'il fait, en langage naturel.
On note aussi que chaque instruction est terminée par un ; et que l'affichage se fait dans un élément du document que l'on appelle le brouillon.
On fait attention à la ponctuation des listes : on n'oublie pas les virgules, comme ici.
Les chaînes de caractères permettent d'afficher des textes, par exemple pour compléter
les résultats de certains calculs.
Elles sont délimitées par des guillemets anglais que l'on appelle double quotes
.
Enfin on note que le nombre π est noté PI (ou pi) et reconnu par le colorisateur comme étant une constante.
On peut effacer le brouillon (ou encore n'importe quel autre élément identifié du document) afin d'éviter de le faire manuellement à chaque exécution d'un script. En outre, on peut préciser une durée et un style d'affichage.
Il n'y a pas d'instruction d'affichage native en JS ni
donc d'effacement d'un élément.
Primitivement on ne peut que faire par exemple :
On peut aussi afficher des messages
Mettre au point un algorithme pour décompter les secondes à l'écran à partir de 10, en rouge pour les nombres pairs et en bleu pour les nombres impairs. On pourra s'inspirer de l'exemple précédent et ajouter alignement:centré pour centrer chaque nombre dans son cadre.
afficher 0 en "couleur:rouge ; taille-de-police:1cm ; largeur:3cm;alignement:centré" à "22cm","330px" pendant "11s"; afficher 1 en "couleur:bleu ; taille-de-police:1cm ; largeur:3cm;alignement:centré" à "22cm","330px" pendant "10s"; //etc… ou avec une boucle (voir la partie 2 du tutoriel) : var k, couleur, durée = 10; var pré_style = "taille-de-police:5cm ; largeur:7cm ; alignement:centré;couleur:"; pour k variant de 0 à durée faire { si k modulo 2 égale 0 alors { couleur = "rouge"} sinon { couleur = "bleu"}; afficher k en pré_style + couleur à "3mm","30px" pendant (durée + 1 - k) + "s"; }; // On peut compléter avec des styles en anglais : // http://www.w3schools.com/css/css_text.asp .
La notion de variable est essentielle en Informatique : chaque variable
correspond à une case mémoire
Pour mieux saisir cette notion, on peut utiliser l'analogie des boîtes aux lettres d'un immeuble : chaque boîte est parfaitement identifiée (désignée par un nom ou un numéro) et son contenu est variable, en général mis à jour chaque matin.
En Algo on déclare les variables avec le mot-clé variables (ou encore variable lorsqu'il n'y en a qu'une) suivi d'une liste de noms qui désignent (ou identifient) ces fameuses cases mémoire. On peut aussi utiliser var, comme en Javascript.
Mettre quelque chose dans une telle case mémoire est réalisé avec l'instruction d'affectation,
Comme leur nom l'indique, on peut faire varier le contenu des variables ; on dit aussi qu'on les réaffecte. Une variable déclarée peut être initialement affectée. La première affectation à une variable est appelée initialisation.
En général les expressions de calcul sont écrites comme sur les calculatrices, en particulier
avec ^ pour mettre en exposant et avec les mêmes priorités
des opérateurs.
Néanmoins d'une part square root
en anglais, comme dans la plupart des langages informatiques)
utilisée avec des parenthèses, suivant la même syntaxe qu'en Mathématique.
On note le changement de couleur des parenthèses pour les expressions imbriquées : pour chaque parenthèse ouvrante, la parenthèse fermante correspondante a forcément la même colorisation. La réciproque est fausse !
L'idée initiale d'un script exploitant des données pour fournir des résultats conduit à distinguer
les variables qui contiennent les premières (l'ordinateur les lit
) de
celles qui reçoivent ces derniers (l'ordinateur les écrit
).
On parle aussi de variable d'entrée et de variable de sortie.
Cette séparation entre entrées et sorties est assez arbitraire puisque toute variable dont le contenu est fourni par l'utilisateur est bien écrite en mémoire, alors que c'est une donnée exploitée pour fournir un résultat, donc plutôt une variable d'entrée !
D'où la saisie possible des valeurs à affecter aux variables d'entrée.
Comme l'utilisateur d'une application, si modeste soit-elle, n'a pas à connaître son algorithmique ni sa programmation pour s'en servir correctement, la saisie d'information est primordiale et doit être intelligible. En Algo on peut le faire simplement ; on peut même saisir des nombres sous forme algébrique, par exemple PI*(11 + 12/sqrt(13)).
Le nom sqrt est aussi celui de la fonction racine carrée pour le grapheur Desmos et pour XCAS.
Déterminer l'hypoténuse d'un triangle ABC rectangle en A, connaissant AB et AC (noms des variables à utiliser comme variables d'entrée, avec des valeurs saisies par l'utilisateur).
Écrire un algorithme qui calcule le volume d'une boule (
Extension : utiliser la fonction round, qui arrondit un nombre à l'entier
le plus proche, pour arrondir au cL près le volume affiché.
Si nous avons déjà vu comment définir et utiliser des chaînes de caractères via une variable, nous ne savons pas encore les exploiter dans des expressions.
Pour ce faire on dispose d'une fonction essentielle, longueur qui retourne le nombre
de caractères, et d'un opérateur, +, qu'on appelle concaténation
et qui consiste à mettre des chaînes bout à bout.
En Algo/JS cet opérateur peut être utilisé aussi bien avec des nombres qu'avec des chaînes, d'une manière naturelle, comme on le voit avec le script suivant.
On retient simplement que "chat" + "pot" donne "chatpot" et que "deux" + 3 donne "deux3".
On peut afficher une concaténation de valeurs plutôt que sa liste. La différence est minime mais sensible. Il faut donc l'expérimenter pour choisir judicieusement car l'affichage d'une liste ajoute des espaces parfois indésirables (on le verra dans le script 10).
Dans une chaîne de caractères comme ch = "Le chat mange.", le caractère "L" est en position 0 et l'espace en position 2. Pour extraire le caractère de position p de la chaîne ch on utilise une notation qui ressemble à celle des fonctions : ch[p].
On retient que
Concevoir un script qui, pour une chaîne ch que l'utilisateur aura saisie,
affiche
On peut à tout moment